package com.hunliji.monitor.share.component.redis;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * Redis调用封装
 * 提供redis的基本操作
 * @author wuchen
 */
public interface RedisFacade {
    /**
     * 设置缓存-使用默认时间 string
     * @param key 缓存key
     * @param value 缓存key
     */
    void set(String key, String value);

    /**
     * 设置缓存 string
     *
     * @param key     缓存key
     * @param value   缓存key
     * @param expires 缓存有效期 单位s
     */
    void set(String key, String value, long expires);

    /**
     * 设置缓存 string
     *
     * @param key     缓存key
     * @param value   缓存结果值
     * @param expires 缓存有效期
     * @param unit    缓存有效期时间的时间单位（参考TimeUnit）
     */
    void set(String key, String value, long expires, TimeUnit unit);

    /**
     * 批量设置缓存
     * @param map
     * @param expires
     */
    void batchSet(Map<String, String> map, Long expires);

    /**
     * 获取缓存值
     *
     * @param key 缓存key
     * @return 缓存值
     */
    String get(String key);

    /**
     * 批量获取缓存数据
     * @param keys
     * @return
     */
    Map<String,String> multiGet(List<String> keys);

    /**
     * 删除缓存
     *
     * @param key 缓存的key
     */
    void del(String key);

    /*********************** 支持 sort set 部分 ************************/
    /**
     * 添加 sort set 元素
     * @param key: key
     * @param value: 值
     * @param score：打分
     */
    void addZSet(String key,String value,Double score);

    /**
     * 删除 sort set 元素
     * @param key
     * @param value
     */
    void delZSet(String key,String value);

    /**
     * 根据打分从 sort set 提取数据-正序
     * @param key：key
     * @param start：开始score
     * @param end：截止score
     * @return
     */
    Set<String> getZSetByScore(String key, Double start, Double end);

    /**
     * 根据打分从 sort set 提取数据-正序
     * @param key key
     * @param start 开始score
     * @param end 截止score
     * @param pageNum 第几页
     * @param pageSize 每页的数量
     * @return
     */
    Set<String> getZSetByScore(String key, Double start, Double end,Long pageNum,Long pageSize);


    /**
     * 根据打分从 sort set 提取数据-倒序
     * @param key：key
     * @param start：开始score
     * @param end：截止score
     * @return
     */
    Set<String> getReverseZSetByScore(String key, Double start, Double end);

    /**
     * 根据打分从 sort set 提取数据-倒序
     * @param key key
     * @param start 开始score
     * @param end 截止score
     * @param pageNum 第几页
     * @param pageSize 每页的数量
     * @return
     */
    Set<String> getReverseZSetByScore(String key, Double start, Double end,Long pageNum,Long pageSize);
}
